package com.cdn.treasure.util;


import cn.hutool.crypto.SecureUtil;

import java.nio.charset.StandardCharsets;

/**
 * aes加密工具类 </br>
 * <p>AES的全称是Advanced Encryption Standard，意思是高级加密标准。参考文章：https://zhuanlan.zhihu.com/p/78913397</p>
 *
 * @author CaiDingNu
 * @Description: AES 加密
 * @date 2022/12/12
 */
public class AesEncryptUtil {


    /**
     * 16位
     */
    private static final String KEY = "1234567890adbcde";

    /**
     * 加密方法
     *
     * @param data 要加密的数据
     * @param key  加密key
     * @return 加密的结果
     */
    public static String encrypt(String data, String key) {
        return SecureUtil.aes(key.getBytes(StandardCharsets.UTF_8)).encryptBase64(data.getBytes(StandardCharsets.UTF_8));
    }

    /**
     * 解密方法
     *
     * @param data 要解密的数据
     * @param key  解密key
     * @return 解密的结果
     */
    public static String desEncrypt(String data, String key) {
        return SecureUtil.aes(key.getBytes(StandardCharsets.UTF_8)).decryptStr(data);
    }

    /**
     * 使用默认的key
     *
     * @param data
     * @return
     */
    public static String encrypt(String data) {
        return encrypt(data, KEY);
    }

    /**
     * 使用默认的key
     *
     * @param data
     * @return
     */
    public static String desEncrypt(String data) {
        return desEncrypt(data, KEY);
    }

    public static void main(String[] args) {
        String originVal = "treasure";
        String treasureForEncrypt = encrypt(originVal);
        String treasureForDesEncrypt = desEncrypt(treasureForEncrypt);
        // 原始字符：treasure
        System.out.println("原始字符：" + originVal);
        // 加密之后：jpK26UtEqyq3c4oyyhwQkA==
        System.out.println("加密之后：" + treasureForEncrypt);
        // 解密之后：treasure
        System.out.println("解密之后：" + treasureForDesEncrypt);
    }


}

